package com.tanhua.dubbo.api;

import com.tanhua.model.domain.Visitors;
import org.apache.dubbo.config.annotation.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;

import java.util.List;

/**
 * @Description: test
 * @Create by: JJ菜菜
 * @Date: 2021/12/7 20:47
 */
@DubboService
public class VisitorsApiImpl implements VisitorsApi{

    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 保存访客记录, 对于同一个用户一天之内只能保存同一次访客记录
     * @param visitors
     */
    @Override
    public void save(Visitors visitors) {


        // 查询访客记录,根据用户id，推荐给用户id，以及当天时间
        Criteria criteria = Criteria.where("userId").is(visitors.getUserId())
                .and("visitorUserId").is(visitors.getVisitorUserId())
                .and("visiDate").is(visitors.getVisitDate());
        Query query = Query.query(criteria);
        boolean exists = mongoTemplate.exists(query, Visitors.class);
        // 不存在就保存
        if(!exists){
            mongoTemplate.save(visitors);
        }
    }

    /**
     * 谁看过我
     * @param date  上一次查询时间
     * @param id
     * @return
     *
     * 查询我的访客数据，存在2种情况：
     *   1. 我没有看过我的访客数据，返回前5个访客信息
     *  2. 之前看过我的访客，从上一次查看的时间点往后查询5个访客数据
     */
    @Override
    public List<Visitors> findMyVisitors(Long date, Long id) {

        Criteria criteria = Criteria.where("userId").is(id);
        if(date != null){
            criteria.and("date").is(date);
        }
        Query query  = Query.query(criteria)
                .limit(5)
                .with(Sort.by(Sort.Order.desc("date")));

        List<Visitors> visitorsList = mongoTemplate.find(query, Visitors.class);
        return visitorsList;
    }
}
